package com.chj.design.sk;

public class Code01_Strategy {

	public interface Strategy {
		int doOperation(int num1, int num2);
	}

	public static class OperationAdd implements Strategy {
		@Override
		public int doOperation(int num1, int num2) {
			return num1 + num2;
		}
	}

	public static class OperationSubstract implements Strategy {
		@Override
		public int doOperation(int num1, int num2) {
			return num1 - num2;
		}
	}

	public static class OperationMultiply implements Strategy {
		@Override
		public int doOperation(int num1, int num2) {
			return num1 * num2;
		}
	}

	public static class Context {
		private Strategy strategy;

		public Context(Strategy strategy) {
			this.strategy = strategy;
		}

		public int executeStrategy(int num1, int num2) {
			return strategy.doOperation(num1, num2);
		}
	}

	public static void main(String[] args) {

		Context context = new Context(new OperationAdd());
		System.out.println("10 + 5 = " + context.executeStrategy(10, 5));

		context = new Context(new OperationSubstract());
		System.out.println("10 - 5 = " + context.executeStrategy(10, 5));

		context = new Context(new OperationMultiply());
		System.out.println("10 * 5 = " + context.executeStrategy(10, 5));

	}
}
